package chapter7classloader;

public class P71 {
    public static class SuperClass{
        static {
            System.out.println("SuperClass init");
        }
        public static int value = 10;
    }

    public static class SubClass extends SuperClass{
        static {
            System.out.println("SubClass init");
        }
        public static final int test = 10;

    }

    public static interface SuperInterface {

        void foo();
        static int x = 10;
    }

    public static class SubInterfaceImpl implements SuperInterface{
        static {
            System.out.println("SubInterfaceImpl初始化");
        }
        @Override
        public void foo() {

        }
    }

    public static void main(String[] args) {
        //对于静态字段 只有直接定义了这个字段的类才会被初始化
        System.out.println(SubClass.value);
        //对于静态常量会在编译的时候存入调用类的常量池中（方法区中），因为没有直接引用定义的常量类，所以不会触发类的初始化
        System.out.println(SubClass.test);
        //声明一个数组也不会让当前类初始化 只会初始化一个新的数组对象[Lchapter7classloader.P71$SubClass
        SubClass[] superClass = new SubClass[10];
        System.out.println(superClass);
        //接口也是同样的道理
        System.out.println(SubInterfaceImpl.x);
    }

}
